<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <ul id="list">
      <li>
        li1
        <ul>
          <li>l11</li>
          <li>l12</li>
          <li>
            l13
            <ul>
              <li>l131</li>
              <li>l132</li>
            </ul>
          </li>
        </ul>
      </li>
      <li>
        li2
        <ul>
          <li>l21</li>
          <li>l22</li>
          <li>l23</li>
          <li>
            l24
            <ul>
              <li>l241</li>
              <li>l242</li>
              <li>l243</li>
              <li>l244</li>
            </ul>
          </li>
        </ul>
      </li>
      <li>li3</li>
    </ul>
    <script>
      /*
      ul->[①li]->[②ul]->[③li]
      1. 遍历出所有li标签对象
      2. 遍历出所有li标签对象中ul，排除没ul的情况
      3. 当遍历到此处发现业务逻辑重复，可以使用递归
      */
      const list = document.getElementById("list");

      function treeLi(list) {
        // 遍历第一层 li 对象
        [...list.children].forEach((el) => {
          if (el.children.length !== 0) {
            // 计算子级列表li标签的个数
            const len = el.children[0].children.length;
            // 获取拼接文本对象，拼接li标签的数量
            el.childNodes[0].data += `[${len}]`;
            treeLi(el.children[0]);
          }
        });
      }
      treeLi(list);
    </script>
  </body>
</html>
